package com.wudimeng.syll.service.impl;


import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wudimeng.syll.common.ApiResponse;
import com.wudimeng.syll.constants.Constant;
import com.wudimeng.syll.dao.ICChuKuXinXiDAO;
import com.wudimeng.syll.dao.ICChuKuXinXiWeiTuoDAO;
import com.wudimeng.syll.dao.ICRuKuXinXiDAO;
import com.wudimeng.syll.entity.CChuKuXinXi;
import com.wudimeng.syll.entity.CChuKuXinXiWeiTuo;
import com.wudimeng.syll.service.ICChuKuXinXiWeiTuoService;
import com.wudimeng.syll.utils.ConvertBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;


@Service
public class CChuKuXinXiWeiTuoService implements ICChuKuXinXiWeiTuoService {

    @Autowired
    private ICChuKuXinXiWeiTuoDAO dao;
    @Autowired
    private ICRuKuXinXiDAO rukudao;
    @Autowired
    private ICChuKuXinXiDAO chukudao;

    @Override
    public ApiResponse selectCChuKuXinXiWeiTuo(Map<String, String> paramMap,Integer pageNum,Integer pageSize) {
        PageHelper.startPage(pageNum,pageSize);
        List<Map<String, Object>> maps = dao.selectCChuKuXinXiWeiTuo(paramMap);
        PageInfo<Map<String, Object>> pageInfo = new PageInfo<>(maps);
        return ApiResponse.instance(pageInfo);
    }

    @Override
    public ApiResponse selectCChuKuXinXiWeiTuoById(Integer id) {
        return ApiResponse.instance(dao.selectCChuKuXinXiWeiTuoById(id));
    }

    @Override
    @Transactional
    public ApiResponse addCChuKuXinXiWeiTuo(CChuKuXinXiWeiTuo chuKuXinXiWeiTuo) {
        try {
            String guoChanHuoJinKouChuKu = chuKuXinXiWeiTuo.getGuoChanHuoJinKouChuKu();
            String ruKuLiuShuiHao = chuKuXinXiWeiTuo.getRuKuLiuShuiHao();
            Map<String, Object> rukuxinxi = rukudao.selectCRuKuXinXiByLiuShuiHao(ruKuLiuShuiHao,null);
            BigDecimal rukushuLiang = (BigDecimal) rukuxinxi.get("ShuLiang");
            BigDecimal YiXiaoShouShuLing = (BigDecimal) rukuxinxi.get("YiXiaoShouShuLing");
            BigDecimal kuncun = rukushuLiang.subtract(YiXiaoShouShuLing);
            if(chuKuXinXiWeiTuo.getShuLiang().compareTo(kuncun) == 1){
                return ApiResponse.error("出库数量不能大于库存数量！");
            }
            //修改上一次入库数量
            rukudao.updCRuKuYiXiaoShouShuLiangADD(chuKuXinXiWeiTuo.getRuKuLiuShuiHao(),chuKuXinXiWeiTuo.getShuLiang());
            dao.addCChuKuXinXiWeiTuo(chuKuXinXiWeiTuo);
        } catch (Exception e) {
            e.printStackTrace();
            return ApiResponse.error(Constant.COMMON_INSERT_FAIL);
        }
        return ApiResponse.success(Constant.COMMON_INSERT_SUCCESS);
    }

    @Override
    @Transactional
    public void updCChuKuXinXiWeiTuo(CChuKuXinXiWeiTuo chuKuXinXiWeiTuo) {
        String shenHeZhuangTai = chuKuXinXiWeiTuo.getShenHeZhuangTai();
        CChuKuXinXi chuKuXinXi = new CChuKuXinXi();
        if("1".equals(shenHeZhuangTai)){ //审核通过  出库表新增记录
            CChuKuXinXiWeiTuo chuKuXinXiWeiTuotemp = dao.selectCChuKuXinXiWeiTuoById(chuKuXinXiWeiTuo.getId());
            chuKuXinXi = (CChuKuXinXi)ConvertBean.coverBean2Bean(chuKuXinXiWeiTuotemp, chuKuXinXi);
            long l = System.currentTimeMillis();//当前时间戳
            chuKuXinXi.setLiuShuiHao(Long.toString(l));
            chukudao.addCChuKuXinXi(chuKuXinXi);
            Map<String, Object> map = chukudao.selectCChuKuXinXiByLiuShuiHao(Long.toString(l),null);
            chuKuXinXiWeiTuo.setLiuSHuiID((Integer) map.get("LiuSHuiID"));
            chuKuXinXiWeiTuo.setLiuShuiHao(Long.toString(l));
        }
        //删除和驳回 回退库存
        if("2".equals(shenHeZhuangTai) || "9".equals(shenHeZhuangTai)){
            CChuKuXinXiWeiTuo chuKuWeiTuo = dao.selectCChuKuXinXiWeiTuoById(chuKuXinXiWeiTuo.getId());
            rukudao.updCRuKuYiXiaoShouShuLiang(chuKuWeiTuo.getRuKuLiuShuiHao(),chuKuWeiTuo.getShuLiang());
        }
        dao.updCChuKuXinXiWeiTuo(chuKuXinXiWeiTuo);
    }
}
